From 83323876823a40128b31678e38f0999d748f0c3f Mon Sep 17 00:00:00 2001 From: Johan Dahlin Date: Tue, 3 Jul 2007 03:26:07 +0000 Subject: [PATCH] Mimic the behavior of gtk_dialog_add_action_widget closer, to make 2007-07-03 Johan Dahlin * gtk/gtkdialog.c (gtk_dialog_buildable_custom_finished): Mimic the behavior of gtk_dialog_add_action_widget closer, to make clicking on the buttons actually work. svn path=/trunk/; revision=18349 --- ChangeLog | 6 ++++++ gtk/gtkdialog.c | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index a681173fc2..e0aa30a353 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-07-03 Johan Dahlin + + * gtk/gtkdialog.c (gtk_dialog_buildable_custom_finished): Mimic the behavior + of gtk_dialog_add_action_widget closer, to make clicking on the buttons + actually work. + 2007-07-02 Matthias Clasen * configure.in: Bump version diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c index 2419689487..83c771a044 100644 --- a/gtk/gtkdialog.c +++ b/gtk/gtkdialog.c @@ -1354,11 +1354,14 @@ gtk_dialog_buildable_custom_finished (GtkBuildable *buildable, GSList *l; ActionWidgetsSubParserData *parser_data; GObject *object; - ResponseData* data; - + GtkDialog *dialog; + ResponseData *ad; + guint signal_id; + if (strcmp (tagname, "action-widgets")) return; + dialog = GTK_DIALOG (buildable); parser_data = (ActionWidgetsSubParserData*)user_data; parser_data->items = g_slist_reverse (parser_data->items); @@ -1369,14 +1372,36 @@ gtk_dialog_buildable_custom_finished (GtkBuildable *buildable, object = gtk_builder_get_object (builder, item->widget_name); if (!object) { - g_warning ("Unknown object %s specified in action-widgets %s", + g_warning ("Unknown object %s specified in action-widgets of %s", item->widget_name, - gtk_buildable_get_name (GTK_BUILDABLE (object))); + gtk_buildable_get_name (GTK_BUILDABLE (buildable))); continue; } - data = get_response_data (GTK_WIDGET (object), TRUE); - data->response_id = atoi (item->response_id); + ad = get_response_data (GTK_WIDGET (object), TRUE); + ad->response_id = atoi (item->response_id); + + if (GTK_IS_BUTTON (object)) + signal_id = g_signal_lookup ("clicked", GTK_TYPE_BUTTON); + else + signal_id = GTK_WIDGET_GET_CLASS (object)->activate_signal; + + if (signal_id) + { + GClosure *closure; + + closure = g_cclosure_new_object (G_CALLBACK (action_widget_activated), + G_OBJECT (dialog)); + g_signal_connect_closure_by_id (object, + signal_id, + 0, + closure, + FALSE); + } + + if (ad->response_id == GTK_RESPONSE_HELP) + gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (dialog->action_area), + GTK_WIDGET (object), TRUE); g_free (item->widget_name); g_free (item->response_id); -- 2.30.2